Drought · Thermal Stress Indicator
TCI – Temperature Condition Index
TCI (Temperature Condition Index) measures thermal stress by comparing current land surface temperature
to its long-term minimum and maximum, and is widely used in drought and vegetation stress monitoring.
1. Scientific Definition
The Temperature Condition Index (TCI) is a standardized thermal index derived from
land surface temperature (LST) time series. It indicates whether current conditions are unusually hot
or cool relative to the historical range.
Formula
TCI = (LSTmax − LSTcurrent ) / (LSTmax − LSTmin )
LSTcurrent – current land surface temperature
LSTmax – long-term maximum LST
LSTmin – long-term minimum LST
Interpretation (0–1)
TCI ≈ 1 → cool / favorable thermal conditions (low stress)
TCI ≈ 0.5 → normal thermal conditions
TCI ≈ 0 → hot / strong thermal stress (possible drought)
Applications
Agricultural and ecological drought monitoring
Vegetation stress and heatwave studies
Combined with VCI to build VHI (Vegetation Health Index)
2. Data Requirements
LST Datasets (example)
MODIS – MOD11A2 (Terra, 8-day, 1 km LST_Day_1km)
Other LST products (Landsat, ECOSTRESS, ERA5-Land LST, etc.)
Temporal Dimension
Multi-year LST time series to compute LSTmin and LSTmax
TCI can be computed for a given month/season or specific date range
Suggested Palette
[
"#b2182b", "#ef8a62", "#fddbc7",
"#d1e5f0", "#67a9cf", "#2166ac"
]
3. Google Earth Engine Code – TCI (from MODIS LST)
Copy Code
// TCI – Temperature Condition Index
// TCI = (LST_max - LST_current) / (LST_max - LST_min)
// AOI
var roi = geometry;
Map.centerObject(roi, 6);
// 1. Load MODIS LST (Terra, 8-day, 1 km)
var lstCol = ee.ImageCollection("MODIS/061/MOD11A2")
.filterBounds(roi)
.filterDate("2010-01-01", "2025-01-01")
.select("LST_Day_1km");
// MODIS LST scale: 0.02 K. Convert to °C.
function toCelsius(img) {
var lstK = img.select("LST_Day_1km").multiply(0.02);
var lstC = lstK.subtract(273.15).rename("LST_C");
return lstC.copyProperties(img, img.propertyNames());
}
var lstCCol = lstCol.map(toCelsius);
// 2. Build long-term min and max LST
var lstStats = lstCCol.reduce(ee.Reducer.min().combine({
reducer2: ee.Reducer.max(),
sharedInputs: true
}));
var lstMin = lstStats.select("LST_C_min");
var lstMax = lstStats.select("LST_C_max");
// 3. Select target period for TCI (e.g. a specific season / year)
var targetStart = "2023-06-01";
var targetEnd = "2023-08-31";
var lstTarget = lstCCol
.filterDate(targetStart, targetEnd)
.mean()
.clip(roi)
.rename("LST_current");
// 4. Compute TCI = (LST_max - LST_current) / (LST_max - LST_min)
var tci = lstMax.subtract(lstTarget)
.divide(lstMax.subtract(lstMin))
.rename("TCI")
.clip(roi);
// Optional: clamp to [0,1]
tci = tci.clamp(0, 1);
// 5. Visualization
var vis = {
min: 0,
max: 1,
palette: [
"#b2182b", "#ef8a62", "#fddbc7",
"#d1e5f0", "#67a9cf", "#2166ac"
]
};
Map.addLayer(tci, vis, "TCI (Temperature Condition Index)");
// 6. Optional: thermal stress mask (e.g. TCI < 0.3)
var thermalStress = tci.lt(0.3).selfMask();
Map.addLayer(thermalStress, {palette:["#b2182b"]}, "High Thermal Stress (TCI < 0.3)", false);
// 7. Export TCI
Export.image.toDrive({
image: tci,
description: "TCI_export",
fileNamePrefix: "TCI_MODIS_2023_summer",
region: roi,
scale: 1000, // MODIS ~1 km
crs: "EPSG:4326",
maxPixels: 1e13
});
TCI – Temperature Condition Index · Start4IT Drought & Vegetation Health Library